#ifndef GAMEROOM_H
#define GAMEROOM_H

#include <QWidget>
#include <QSound>

// 枚举蛇上下左右移动的移动方向
enum class SnakeDirect
{
    UP = 0,
    DOWN,
    LEFT,
    RIGHT
};

class GameRoom : public QWidget
{
    Q_OBJECT
public:
    explicit GameRoom(QWidget *parent = nullptr);

    // 绘制游戏房间背景
    void paintEvent(QPaintEvent *event);

    // 处理蛇的上下左右移动
    void moveUp();// 向上移动
    void moveDown();// 向下移动
    void moveLeft();// 向左移动
    void moveRight();// 向右移动

    bool checkFail();// 判断游戏是否结束，即蛇自己撞到自己

    void createNewFood();// 创建食物

    void setTimeOut(int timeout)// 设置蛇的移动速度，三个模式下的都不一样
    {
        moveTimeOut = timeout;
    }

private:
    const int KSnakeNodeWidth = 20;// 蛇身体单个节点的宽度
    const int KSnakeNodeHeight = 20;// 蛇身体单个节点的高度
    const int KSnakeDefaultSpeed = 200;// 蛇的默认移动速度

    // 蛇整体的链表，蛇的节点都是矩形
    QList<QRectF> SnakeList;
    QRectF food;// 食物节点

    // 设置蛇的默认移动方向 向上
    SnakeDirect moveDirect = SnakeDirect::UP;

    // 设置定时器
    // 表示蛇的开始移动，暂停移动
    QTimer *timer;

    bool isGameStart = false;// 判断游戏是否开始

    QSound *sound;// 播放游戏房间的背景音乐

    int moveTimeOut = KSnakeDefaultSpeed;// 蛇的移动速度，不同模式下，速度不一样

};

#endif // GAMEROOM_H
